package com.ruoyi.common.exception.file;

import java.util.Arrays;

/**
 * 文件上传 误异常类
 *
 * @author ruoyi
 */
public class InvalidExtensionException extends FileUploadException {
    private static final long serialVersionUID = 1L;

    private String[] allowedExtension;
    private String extension;
    private String filename;

    /**
     * 构造方法，创建一个文件扩展名无效的异常实例
     *
     * @param allowedExtension 允许的文件扩展名数组
     * @param extension        实际上传文件的扩展名
     * @param filename         上传文件的名称
     */
    public InvalidExtensionException(String[] allowedExtension, String extension, String filename) {
        super("文件[" + filename + "]后缀[" + extension + "]不正确，请上传" + Arrays.toString(allowedExtension) + "格式");
        this.allowedExtension = allowedExtension;
        this.extension = extension;
        this.filename = filename;
    }

    /**
     * 获取允许的文件扩展名列表
     *
     * @return 允许的文件扩展名数组
     */
    public String[] getAllowedExtension() {
        return allowedExtension;
    }

    /**
     * 获取实际上传文件的扩展名
     *
     * @return 文件扩展名
     */
    public String getExtension() {
        return extension;
    }

    /**
     * 获取上传文件的名称
     *
     * @return 文件名
     */
    public String getFilename() {
        return filename;
    }

    /**
     * 图片文件扩展名无效异常类
     * 用于专门处理图片类型文件上传时扩展名不被允许的情况
     */
    public static class InvalidImageExtensionException extends InvalidExtensionException {
        private static final long serialVersionUID = 1L;

        /**
         * 构造方法，创建一个图片文件扩展名无效的异常实例
         *
         * @param allowedExtension 允许的文件扩展名数组
         * @param extension        实际上传文件的扩展名
         * @param filename         上传文件的名称
         */
        public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) {
            super(allowedExtension, extension, filename);
        }
    }

    /**
     * Flash文件扩展名无效异常类
     * 用于专门处理Flash类型文件上传时扩展名不被允许的情况
     */
    public static class InvalidFlashExtensionException extends InvalidExtensionException {
        private static final long serialVersionUID = 1L;

        /**
         * 构造方法，创建一个Flash文件扩展名无效的异常实例
         *
         * @param allowedExtension 允许的文件扩展名数组
         * @param extension        实际上传文件的扩展名
         * @param filename         上传文件的名称
         */
        public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) {
            super(allowedExtension, extension, filename);
        }
    }

    /**
     * 媒体文件扩展名无效异常类
     * 用于专门处理媒体类型文件上传时扩展名不被允许的情况
     */
    public static class InvalidMediaExtensionException extends InvalidExtensionException {
        private static final long serialVersionUID = 1L;

        /**
         * 构造方法，创建一个媒体文件扩展名无效的异常实例
         *
         * @param allowedExtension 允许的文件扩展名数组
         * @param extension        实际上传文件的扩展名
         * @param filename         上传文件的名称
         */
        public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) {
            super(allowedExtension, extension, filename);
        }
    }

    /**
     * 视频文件扩展名无效异常类
     * 用于专门处理视频类型文件上传时扩展名不被允许的情况
     */
    public static class InvalidVideoExtensionException extends InvalidExtensionException {
        private static final long serialVersionUID = 1L;

        /**
         * 构造方法，创建一个视频文件扩展名无效的异常实例
         *
         * @param allowedExtension 允许的文件扩展名数组
         * @param extension        实际上传文件的扩展名
         * @param filename         上传文件的名称
         */
        public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) {
            super(allowedExtension, extension, filename);
        }
    }
}
